﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;
using SLLottery.LotterySrv;
using SLLottery.Common;
using System.Collections.ObjectModel;
namespace SLLottery.LotteryView.SSC.Reverse
{
    public partial class NSSC : UserControl
    {
        private LotterySrv.LotteryServiceClient srv;
        private int playtype = 0;
        int playTypeRadioId = 0;
        public NSSC()
        {
            InitializeComponent();
            srv = WcfProxy.GetProxy;
            srv.GetPlayTypeCompleted += new EventHandler<GetPlayTypeCompletedEventArgs>(srv_GetPlayTypeCompleted);
            srv.GetPlayTypeRadioCompleted += new EventHandler<GetPlayTypeRadioCompletedEventArgs>(srv_GetPlayTypeRadioCompleted);
            srv.GetPlayTypeNumCompleted += new EventHandler<GetPlayTypeNumCompletedEventArgs>(srv_GetPlayTypeNumCompleted);
            srv.GetOddsCompleted += new EventHandler<GetOddsCompletedEventArgs>(srv_GetOddsCompleted);
            srv.GetCurrenIssuNoCompleted += new EventHandler<GetCurrenIssuNoCompletedEventArgs>(srv_GetCurrenIssuNoCompleted);
            this.Loaded += new RoutedEventHandler(NSSC_Loaded);
        }
        void srv_GetOddsCompleted(object sender, GetOddsCompletedEventArgs e)
        {
            Controls.RateGrid rateGrid = gridPanel.Children[0] as Controls.RateGrid;
            rateGrid.DataSource=e.Result.ToList();
            rateGrid.BindData();
            App.Session[Constant.REVERSEODDS_SESSION] = e.Result.ToList();
        }
        void srv_GetPlayTypeCompleted(object sender, GetPlayTypeCompletedEventArgs e)
        {
            App.Session[Constant.NSSCPLAYTYPE_SESSION] = e.Result.ToList();
            if (!App.Session.ContainsKey(Constant.PLAYTYPERADIO_SESSION))
            {
                srv.GetPlayTypeRadioAsync();
            }
            else if (!App.Session.ContainsKey(Constant.PLAYTYPENUM_SESSION))
            {
                srv.GetPlayTypeNumAsync();
            }
            else
            {
                InitPage();
            }
        }
        void srv_GetPlayTypeRadioCompleted(object sender, GetPlayTypeRadioCompletedEventArgs e)
        {
            App.Session[Constant.PLAYTYPERADIO_SESSION] = e.Result.ToList();
            if (!App.Session.ContainsKey(Constant.PLAYTYPENUM_SESSION))
            {
                srv.GetPlayTypeNumAsync();
            }
            else
            {
                InitPage();
            }
        }
        void srv_GetPlayTypeNumCompleted(object sender, GetPlayTypeNumCompletedEventArgs e)
        {
            App.Session[Constant.PLAYTYPENUM_SESSION] = e.Result.ToList();
            InitPage();
        }
        void NSSC_Loaded(object sender, RoutedEventArgs e)
        {
            if (!App.Session.ContainsKey(Constant.PLAYTYPE_SESSION)
    || App.Session[Constant.PLAYTYPE_SESSION] == null)
            {
                 srv.GetPlayTypeAsync((int)LotteryType.NSSC);
            }
            else if (!App.Session.ContainsKey(Constant.PLAYTYPERADIO_SESSION))
            {
                srv.GetPlayTypeRadioAsync();
            }
            else if (!App.Session.ContainsKey(Constant.PLAYTYPENUM_SESSION))
            {
                srv.GetPlayTypeNumAsync();
            }
            else
            {
                 List<PlayTypeInfo> list = App.Session[Constant.PLAYTYPE_SESSION] as List<PlayTypeInfo>;
                list = list.Where(p => p.LotteryTypeID1 == (int)LotteryType.NSSC).ToList();
                App.Session[Constant.NSSCPLAYTYPE_SESSION] = list;
                InitPage();
            }
               
        }
        void InitPage()
        {
            List<PlayTypeInfo> list = App.Session[Constant.NSSCPLAYTYPE_SESSION] as List<PlayTypeInfo>;
            if (list == null || list.Count == 0)
            {
                Messager.Show("逆向时时彩模块暂时故障!");
                App.Current.RootVisual = new LoginPage();
                return;
            }
            foreach (PlayTypeInfo l in list)
            {
                Controls.PlayTypeButton btn = new Controls.PlayTypeButton();
                btn.Text = l.PlayTypeName;
                btn.Tag = (PlayType)l.PlayTypeID;
                btn.MouseLeftButtonDown += new MouseButtonEventHandler(PlayTypeButton_MouseLeftButtonDown);
                buttonPanel.Children.Add(btn);
                if (list.First() == l)
                    PlayTypeButton_MouseLeftButtonDown(btn, null);
            }
        }
        private void PlayTypeButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Controls.PlayTypeButton Btn = (Controls.PlayTypeButton)sender;
            Border border = Btn.border;
            ImageBrush imageBrush = new ImageBrush();
            imageBrush.ImageSource = new BitmapImage(new Uri("/SLLottery;component/Images/Btn_Bg_Org.png", UriKind.Relative));
            border.Background = imageBrush;
            foreach (Controls.PlayTypeButton btn in buttonPanel.Children)
            {
                if (!Btn.Equals(btn))
                {
                    Border b = btn.border;
                    imageBrush = new ImageBrush();
                    imageBrush.ImageSource = new BitmapImage(new Uri("/SLLottery;component/Images/Btn_Bg_Black.png", UriKind.Relative));
                    b.Background = imageBrush;
                }
            }
            Redirect(Btn);
        }
        public void Redirect(Controls.PlayTypeButton btn)
        {
            playtype = (int)((PlayType)btn.Tag);
            MainPage.playType = Convert.ToInt32(btn.Tag);
            this.gridPanel.Children.Clear();
            Controls.RateGrid rateGrid = new Controls.RateGrid(0, 10);
            this.gridPanel.Children.Add(rateGrid);
            if (XuanHaoPanel.Children.Count > 0)
            {
                XuanHaoPanel.Children.Clear();
            }
            Controls.TouZhuCtrl touzhu = new Controls.TouZhuCtrl();
            MainPage.TouzhuControl = touzhu;
            DockPanel dockPanel = new DockPanel();
            dockPanel.LastChildFill = true;
            dockPanel.Width = 658;

            Grid grid = new Grid();
            grid.RowDefinitions.Insert(0, new RowDefinition() { Height = new GridLength() });
            grid.RowDefinitions.Insert(1, new RowDefinition() { Height = new GridLength(25) });

            Controls.NumPanel numPanel = new Controls.NumPanel();
            Controls.RadioButtonPanel rbPanel = new Controls.RadioButtonPanel();
            grid.Children.Add(numPanel);
            grid.Children.Add(rbPanel);
            numPanel.SetValue(Grid.RowProperty, 0);
            rbPanel.SetValue(Grid.RowProperty, 1);

            touzhu.isShow = false;
            touzhu.PlayType = Convert.ToInt32(btn.Tag);
            touzhu.numPanel = numPanel;
            touzhu.rbPanel = rbPanel;
            touzhu.PlayTypeName = btn.Text;
            touzhu.lotteryType = LotteryType.NSSC;

            DockPanel.SetDock(grid, Dock.Top);
            dockPanel.Children.Add(grid);
            DockPanel.SetDock(touzhu, Dock.Top);
            dockPanel.Children.Add(touzhu);
            XuanHaoPanel.Children.Add(dockPanel);

            List<PlayTypeRadioInfo> list_radio = App.Session[Constant.PLAYTYPERADIO_SESSION] as List<PlayTypeRadioInfo>;
            list_radio = (from l in list_radio where l.PlayTypeID1 == (int)((PlayType)btn.Tag) select l).ToList();
            List<PlayTypeNumInfo> list_num = App.Session[Constant.PLAYTYPENUM_SESSION] as List<PlayTypeNumInfo>;
            list_num = (from l in list_num where l.PlayTypeID1 == (int)((PlayType)btn.Tag) select l).ToList();
            string numPanelText = string.Empty;
            string rbPanelText = string.Empty;
            string rbPanelValue = string.Empty;
            foreach (PlayTypeRadioInfo p in list_radio)
            {
                if (p == list_radio.First())
                    MainPage.playTypeRadio = Convert.ToInt32(p.PlayTypeRadioID);
                rbPanelText += p.PlayTypeRadioName;
                rbPanelValue += p.PlayTypeRadioID.ToString();
                if (p != list_radio.Last())
                {
                    rbPanelValue += ",";
                    rbPanelText += ",";
                }
            }
            foreach (PlayTypeNumInfo p in list_num)
            {
                numPanelText += p.PlayTypeNumName;
                if (p != list_num.Last())
                    numPanelText += ",";
            }
            numPanel.Text = numPanelText;
            rbPanel.Text = rbPanelText;
            rbPanel.Value = rbPanelValue;
            rbPanel.CreateElement();
            numPanel.CreateElement();
            foreach (RadioButton rbtn in rbPanel.PlayTypePanel.Children)
            {
                rbtn.Checked += (s, e) =>
                    {
                        RadioButton rb = s as RadioButton;
                        if (rb.IsChecked == false)
                            return;
                        playTypeRadioId = Convert.ToInt32(rb.Tag);
                        MainPage.playType = playtype;
                        MainPage.playTypeRadio = playTypeRadioId;
                        srv.GetCurrenIssuNoAsync((int)LotteryType.SSC);
                    };
            }
            //选择号码时改变号码个数===========
            List<Controls.NumButton> listNumButton=numPanel.GetNumButton();
            List<Button> listCmdButton = numPanel.GetCmdButton();
            foreach (Controls.NumButton nb in listNumButton)
            {
                nb.MouseLeftButtonDown += (s, e) =>
                    {
                        string num = numPanel.GetChoosedNum();
                        touzhu.lbBetCount.Text = num.Length.ToString();
                    };
            }
            foreach (Button nb in listCmdButton)
            {
                nb.Click += (s, e) =>
                {
                    string num = numPanel.GetChoosedNum();
                    touzhu.lbBetCount.Text = num.Length.ToString();
                };
            }
            //单选框选择时执行============
            foreach (RadioButton rb in rbPanel.PlayTypePanel.Children)
            {
                rb.Checked += (s, er) =>
                {
                    touzhu.NumBasket.Items.Clear();
                    touzhu.lbBetCount.Text = "0";

                    numPanel.ClearChild();
                    numPanel.isWriten = false;
                    numPanel.isCreated = false;
                    numPanel.CreateElement();
                    listNumButton = numPanel.GetNumButton();
                    listCmdButton = numPanel.GetCmdButton();
                    foreach (Controls.NumButton nb in listNumButton)
                    {
                        nb.MouseLeftButtonDown += (sr, e) =>
                        {
                            string num = numPanel.GetChoosedNum();
                            touzhu.lbBetCount.Text = num.Length.ToString();
                        };
                    }
                    foreach (Button nb in listCmdButton)
                    {
                        nb.Click += (sr, e) =>
                        {
                            string num = numPanel.GetChoosedNum();
                            touzhu.lbBetCount.Text = num.Length.ToString();
                        };
                    }
                };
            }
            rateGrid.numPanel = numPanel;
            rateGrid.touzhu = touzhu;
            MainPage.rateGrids = new List<Controls.RateGrid> { rateGrid };
            playTypeRadioId = Convert.ToInt32(((RadioButton)rbPanel.GetChoosedRadioButton()).Tag);
            srv.GetCurrenIssuNoAsync((int)LotteryType.SSC);
        }

        void srv_GetCurrenIssuNoCompleted(object sender, GetCurrenIssuNoCompletedEventArgs e)
        {
            if (e.Result == null)
            {
                return;
            }
            srv.GetOddsAsync(playtype, playTypeRadioId, e.Result.IssueNo);
        }


    }
}

